

// 接收一个sql语句 以及所需的values
// 这里接收第二参数values的原因是可以使用mysql的占位符 '?'
// 比如 query(`select * from my_database where id = ?`, [1])

const mysql = require("mysql")

let query = function( sql, values ) {
    const pool = mysql.createPool({
        multipleStatements: true, //支持多sql语句
        host     :  global.config.mysql.host,
        port     :  global.config.mysql.port,
        user     :  global.config.mysql.username,
        password :  global.config.mysql.password,
        database :  global.config.mysql.database,
        timezone :  "08:00"
    })
    // debugWriteLineSql(sql) //用于调试
    // 返回一个 Promise
    return new Promise(( resolve, reject ) => {
        pool.getConnection((err, connection) =>{
            if (err) {
                console.error( '数据库错误：', err )
                reject( err )
            } else {
                connection.query(sql, values, ( err, rows) => {
                    if ( err ) {
                        console.error('数据库连接池错误：', err )
                        reject( err )
                    } else {
                        resolve( rows )
                    }
                    // 结束会话
                    connection.release()
                    // pool.end()
                })
            }
        })
    })

}
//因为webstrom控制台输出不完整，所以可以开启以下调试模式，记录每条运行的sql，请在生产中关闭此功能
function debugWriteLineSql(sql){
    const fs = require('fs')
    const path = require('path')
    const textToAppend = sql + '\n';
    const filePath = path.join(__dirname,'./sql.txt')
    fs.appendFile(filePath, textToAppend, (err) => {
        if (err) {
            console.error('写入文件时发生错误:', err);
        } else {
            console.log('成功将文本追加到文件中');
        }
    });
}
module.exports = query